//index.ts
import { createI18n } from 'vue-i18n'        //引入vue-i18n组件
//引入同级目录下文件
import enLocale from 'element-plus/lib/locale/lang/en'
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
const modules = import.meta.globEager('./*')

//假设你还有其他目录下的语言文件 它的路径是 src/views/home/locales/en-US.ts
//那么你就可以 使用 :lower:（小写） :upper:（大写） 来引入文件
const viewModules = import.meta.globEager('../views/**/locales/[[:lower:]][[:lower:]]-[[:upper:]][[:upper:]].ts')

function getLangAll(): any {
    let message: any = {//element Language setting
        [enLocale.name]: {
            // el 这个属性很关键，一定要保证有这个属性，
            el: enLocale.el,
            // 定义你自己的字典，但是请不要和 `el` 重复，这样会导致 ElementPlus 内部组件的翻译失效.
            message: {
                hello: 'hello world',
            },
        },
        [zhLocale.name]: {
            el: zhLocale.el,
            // 定义你自己的字典，但是请不要和 `el` 重复，这样会导致 ElementPlus 内部组件的翻译失效.
            message: {
                hello: '你好，世界',
            },
        },
        testLocale: {
            el: {},
            // 没有定义 message 字段，会 fallback 回到 en 去, fallbackLocale 的定义在下方 👇
        },
    }
    getLangFiles(modules, message)
    getLangFiles(viewModules, message)
    return message
}
/**
 * 获取所有语言文件
 * @param {Object} mList
 */
function getLangFiles(mList: any, msg: any) {
    for (let path in mList) {
        if (mList[path].default) {
            //  获取文件名
            let pathName  = path.substr(path.lastIndexOf('/') + 1, 5);

            if (msg[pathName]) {
                msg[pathName] = {
                    ...mList[pathName],
                    ...mList[path].default
                }
            } else {
                msg[pathName] = mList[path].default
            }

        }
    }
}



//注册i8n实例并引入语言文件
const i18n = createI18n({
    legacy: false,
    messages: getLangAll(),
    locale: zhLocale.name,
    fallbackLocale: enLocale.name,
})

export default i18n; //将i18n暴露出去，在main.js中引入挂载